package com.example.zhengchaojun.arcgis.map;

import android.view.View;

import com.esri.arcgisruntime.concurrent.ListenableFuture;
import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.layers.Layer;
import com.esri.arcgisruntime.mapping.view.Callout;
import com.esri.arcgisruntime.mapping.view.GraphicsOverlay;
import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult;
import com.esri.arcgisruntime.mapping.view.LayerViewStateChangedListener;
import com.esri.arcgisruntime.mapping.view.MapView;

/**
 * 类描述：MapView管理类封装了常用方法
 * 作者：郑朝军 on 2018/5/10
 * 邮箱：1250393285@qq.com
 * 公司：武汉智博创享科技有限公司
 * 修改人：郑朝军 on 2018/5/10
 * 修改备注：
 */
public class MapViewManager implements MapViewDelegate
{
    private MapView m_mapView;

    public MapViewManager(MapView mapView)
    {
        this.m_mapView = mapView;
    }

    /**
     * 创建图层改变监听事件
     *
     * @param listener 图层视图改变监听
     */
    public void createLayerViewStateChangedListener(LayerViewStateChangedListener listener)
    {
        m_mapView.addLayerViewStateChangedListener(listener);
    }

    /**
     * 地图Touch事件监听
     *
     * @param listener 监听
     */
    public void createOnTouchListener(View.OnTouchListener listener)
    {
        m_mapView.setOnTouchListener(listener);
    }

    /**
     * 创建图层：举例：WmsLayer
     *
     * @param layer 你要添加的图层
     * @return 是否成功
     */
    public boolean createLayer(Layer layer)
    {
        return m_mapView.getMap().getOperationalLayers().add(layer);
    }

    /**
     * 创建 画图的图层
     */
    public void createGraphicsOverlay(GraphicsOverlay graphicsOverlay)
    {
        m_mapView.getGraphicsOverlays().add(graphicsOverlay);
    }

    /**
     * 屏幕坐标转地图坐标
     *
     * @param screenPoint 屏幕坐标
     * @return 地图坐标
     */
    public Point updateScreenToLocation(android.graphics.Point screenPoint)
    {
        return m_mapView.screenToLocation(screenPoint);
    }

    /**
     * 更新 地图缩放比
     *
     * @param scale 缩放比：【大于1：小于1】：【放大：缩小】
     * @return
     */
    public ListenableFuture<Boolean> updateViewpointScaleAsync(double scale)
    {
        double mScale = m_mapView.getMapScale();
        return m_mapView.setViewpointScaleAsync(mScale * scale);
    }

    /**
     * 更新视图中心点
     *
     * @param point 地图坐标点
     * @return
     */
    public ListenableFuture<Boolean> updateViewpointCenterAsync(Point point)
    {
        return m_mapView.setViewpointCenterAsync(point);
    }

    /**
     * 更新是否显示放大像
     *
     * @param enabled true:显示放大镜
     */
    public void updateMagnifierWihtPanMapEnabled(boolean enabled)
    {
        m_mapView.setMagnifierEnabled(enabled);
        m_mapView.setCanMagnifierPanMap(enabled);
    }

    /**
     * 查询地图标注
     *
     * @return 标注
     */
    public Callout queryMapCallout()
    {
        return m_mapView.getCallout();
    }

    /**
     * 查询异步地识别给定层中的地质元素
     *
     * @param layer            图层
     * @param screenPoint      屏幕点
     * @param tolerance        最大允许值是100DP。
     * @param returnPopupsOnly
     * @param maximumResults
     * @return
     */
    public ListenableFuture<IdentifyLayerResult> queryIdentifyLayerAsync(Layer layer, android.graphics.Point screenPoint, double tolerance, boolean returnPopupsOnly, int maximumResults)
    {
        return m_mapView.identifyLayerAsync(layer, screenPoint, tolerance, returnPopupsOnly, maximumResults);
    }


}
